import { newPoint } from './useBase'

export default (config = {}) => {
  const clientId = config.clientId || '28524d8c65844630a3427270c9a16323'
  const clientSecret = config.clientSecret || '84bc17650bb04491aa8475b9cbe3d1c4'
  const urlService = 'http://120.52.31.31:590/service/api/egis/base/v1'
  const authType = 'Token'
  const tokenUrl = 'http://120.52.31.31:590/oauth/token'

  // 关键词搜索
  const searchKeyword = (keyword, options) => {
    let { region = '' } = options || {}
    //创建地图搜索服务对象
    let wpssService = new egis.ews.RestWPSSService({
      url: urlService,
      clientId: clientId,
      clientSecret: clientSecret,
      authType: authType,
      tokenUrl: tokenUrl,
    });
    let params = new egis.ews.SearchKeywordInput({
      keyword: `${region  || '内蒙古自治区'}${keyword}`,
      bounds: "97.17140236,37.40665844,126.06868249,53.33367855", // 内蒙古区域范围
      region: '内蒙古自治区',
      // admin_code: 156150100, // 行政区划9位国标码
      // city_limit: true, // 是否仅返回region对应区域内的数据
      query_type: 2, // 搜索类型，1：POI搜索，2：建议词查询
      scope: 2, // 结果详细程度, 1：返回基本信息；2：返回检索POI详细信息
      level: 5, // 融合等级（1-10）
      page_num: 0,
      page_size: 20,
    });
    return wpssService.searchKeyWord(params)
  }

  // 逆地理编码服务
  const regeocode = ({ lat, lng }) => {
    //构造逆地理编码服务对象
    let WRGSService = new egis.ews.RestWRGSService({
      url: urlService,//服务
      clientId,
      clientSecret,
      authType: authType,
      tokenUrl: tokenUrl,
    });
    let WRGSInput = new egis.ews.WRGSInput({
      location: `${lng},${lat}`
    });
    return WRGSService.regeocode(WRGSInput);
  }

  // 转换cgcs200坐标
  const transformToCGCS2000 = ({ lat, lng }, type) => {
    const types = {
      'CGCS2000': 1, // 国家大地坐标
      'BDS': 7, // 百度坐标
      'GCJ02': 5, // 国测局（GCJ02）坐标
      'WGS84': 3, // WGS84经纬度坐标
    }
    let WCCSService = new egis.ews.RestWCCSService({
      url: urlService,//服务
      clientId,
      clientSecret,
      authType: authType,
      tokenUrl: tokenUrl,
    });
    let pointInput = new egis.ews.WCCSInput({
      geometry: newPoint({ lat, lng }), //需要进行坐标转换的几何对象
      from: types[type] || 3, //源坐标类型，5为国测局（GCJ02）坐标
      to: 1, //目标坐标类型，1为国家大地坐标（CGCS2000）
      format: 'json' //返回数据格式类型
    });
    return WCCSService.transform(pointInput).then(res => {
      return {
        lat: res.y.toFixed(6),
        lng: res.x.toFixed(6)
      }
    })
  }

  return {
    searchKeyword,
    regeocode,
    transformToCGCS2000
  }
}